home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2gem106.lzh / CRYSTAL1.06 / SRC / TOOLBOX / WINDTOOL.MOD < prev   
Encoding:
Modula Implementation  |  1993-01-29  |  9.5 KB  |  494 lines

  1. IMPLEMENTATION MODULE WindTool;
  2.  
  3. (*
  4. Window Tools.
  5.  
  6. UK __DATE__ __TIME__
  7. *)
  8.  
  9. (*IMP_SWITCHES*)
  10.  
  11. FROM AES      IMPORT IntIn,IntOut,crystal,Integer,TreePtr,ObjectIndex,
  12.                      Version;
  13. FROM WindMgr  IMPORT WindowElement,WindowFunctions,Desk,WFBack,
  14.                      WindUpdate;
  15. FROM PORTAB   IMPORT UNSIGNEDWORD,SIGNEDWORD;
  16. FROM RcMgr    IMPORT GRect,RcIntersect;
  17. FROM GrafTool IMPORT HideMouse,ShowMouse;
  18. FROM SYSTEM   IMPORT ADR;
  19. AES_SYSTEM_IMPORT
  20.  
  21. IMPORT WindMgr;
  22.  
  23. #if Seimet
  24. CONST F104 = 068020500H;
  25.       F105 = 069060100H;
  26. #endif
  27.  
  28. PROCEDURE SetKind(Handle: SIGNEDWORD; Kind: WindowElement);
  29. BEGIN
  30.   WITH IntIn DO
  31.     Array[0]:= Handle;
  32.     Array[1]:= ORD(WFKind);
  33.     Array[2]:= CAST(Integer,Kind);
  34.   END;
  35.   crystal(105,6,1,0);
  36. END SetKind;
  37.  
  38. PROCEDURE SetName(Handle: SIGNEDWORD; VAR Name: ARRAY OF CHAR);
  39. BEGIN
  40.   WITH IntIn DO
  41.     WH:= Handle;
  42.     WF:= ORD(WFName);
  43.     WA:= ADR(Name);
  44.   END;
  45.   crystal(105,6,1,0);
  46. END SetName;
  47.  
  48. PROCEDURE SetInfo(Handle: SIGNEDWORD; VAR Info: ARRAY OF CHAR);
  49. BEGIN
  50.   WITH IntIn DO
  51.     WH:= Handle;
  52.     WF:= ORD(WFInfo);
  53.     WA:= ADR(Info);
  54.   END;
  55.   crystal(105,6,1,0);
  56. END SetInfo;
  57.  
  58. PROCEDURE GetWorkXYWH(Handle: SIGNEDWORD; VAR Rect: GRect);
  59. BEGIN
  60.   WITH IntIn DO
  61.     Array[0]:= Handle;
  62.     Array[1]:= ORD(WFWorkXYWH);
  63.   END;
  64.   crystal(104,2,5,0);
  65.   WITH Rect DO
  66.     GX:= IntOut[1];
  67.     GY:= IntOut[2];
  68.     GW:= IntOut[3];
  69.     GH:= IntOut[4];
  70.   END;
  71. END GetWorkXYWH;
  72.  
  73. PROCEDURE SetCurrXYWH(Handle: SIGNEDWORD; VAR Rect: GRect);
  74. BEGIN
  75.   WITH IntIn DO
  76.     Array[0]:= Handle;
  77.     Array[1]:= ORD(WFCurrXYWH);
  78.     WITH Rect DO
  79.       Array[2]:= GX;
  80.       Array[3]:= GY;
  81.       Array[4]:= GW;
  82.       Array[5]:= GH;
  83.     END;
  84.   END;
  85.   crystal(105,6,1,0);
  86. END SetCurrXYWH;
  87.  
  88. PROCEDURE GetCurrXYWH(Handle: SIGNEDWORD; VAR Rect: GRect);
  89. BEGIN
  90.   WITH IntIn DO
  91.     Array[0]:= Handle;
  92.     Array[1]:= ORD(WFCurrXYWH);
  93.   END;
  94.   crystal(104,2,5,0);
  95.   WITH Rect DO
  96.     GX:= IntOut[1];
  97.     GY:= IntOut[2];
  98.     GW:= IntOut[3];
  99.     GH:= IntOut[4];
  100.   END;
  101. END GetCurrXYWH;
  102.  
  103. PROCEDURE GetPrevXYWH(Handle: SIGNEDWORD; VAR Rect: GRect);
  104. BEGIN
  105.   WITH IntIn DO
  106.     Array[0]:= Handle;
  107.     Array[1]:= ORD(WFPrevXYWH);
  108.   END;
  109.   crystal(104,2,5,0);
  110.   WITH Rect DO
  111.     GX:= IntOut[1];
  112.     GY:= IntOut[2];
  113.     GW:= IntOut[3];
  114.     GH:= IntOut[4];
  115.   END;
  116. END GetPrevXYWH;
  117.  
  118. PROCEDURE GetFullXYWH(Handle: SIGNEDWORD; VAR Rect: GRect);
  119. BEGIN
  120.   WITH IntIn DO
  121.     Array[0]:= Handle;
  122.     Array[1]:= ORD(WFFullXYWH);
  123.   END;
  124.   crystal(104,2,5,0);
  125.   WITH Rect DO
  126.     GX:= IntOut[1];
  127.     GY:= IntOut[2];
  128.     GW:= IntOut[3];
  129.     GH:= IntOut[4];
  130.   END;
  131. END GetFullXYWH;
  132.  
  133. PROCEDURE SetHSlide(Handle: SIGNEDWORD; Pos: UNSIGNEDWORD);
  134. BEGIN
  135.   WITH IntIn DO
  136.     Array[0]:= Handle;
  137.     Array[1]:= ORD(WFHSlide);
  138.     Array[2]:= Pos;
  139.   END;
  140.   crystal(105,6,1,0);
  141. END SetHSlide;
  142.  
  143. PROCEDURE GetHSlide(Handle: SIGNEDWORD): UNSIGNEDWORD;
  144. BEGIN
  145.   WITH IntIn DO
  146.     Array[0]:= Handle;
  147.     Array[1]:= ORD(WFHSlide);
  148.   END;
  149.   crystal(104,2,5,0);
  150.   RETURN IntOut[1];
  151. END GetHSlide;
  152.  
  153. PROCEDURE SetVSlide(Handle: SIGNEDWORD; Pos: UNSIGNEDWORD);
  154. BEGIN
  155.   WITH IntIn DO
  156.     Array[0]:= Handle;
  157.     Array[1]:= ORD(WFVSlide);
  158.     Array[2]:= Pos;
  159.   END;
  160.   crystal(105,6,1,0);
  161. END SetVSlide;
  162.  
  163. PROCEDURE GetVSlide(Handle: SIGNEDWORD): UNSIGNEDWORD;
  164. BEGIN
  165.   WITH IntIn DO
  166.     Array[0]:= Handle;
  167.     Array[1]:= ORD(WFVSlide);
  168.   END;
  169.   crystal(104,2,5,0);
  170.   RETURN IntOut[1];
  171. END GetVSlide;
  172.  
  173. PROCEDURE SetTop(Handle: SIGNEDWORD);
  174. BEGIN
  175.   WITH IntIn DO
  176.     Array[0]:= Handle;
  177.     Array[1]:= ORD(WFTop);
  178.   END;
  179.   crystal(105,6,1,0);
  180. END SetTop;
  181.  
  182. PROCEDURE GetTop(): SIGNEDWORD;
  183. BEGIN
  184.   IntIn.Array[1]:= ORD(WFTop);
  185.   crystal(104,2,5,0);
  186.   RETURN IntOut[1];
  187. END GetTop;
  188.  
  189. PROCEDURE GetTopAndBelow(VAR Top  : SIGNEDWORD;
  190.                          VAR Id   : SIGNEDWORD;
  191.                          VAR Below: SIGNEDWORD);
  192. BEGIN
  193.   IntIn.Array[1]:= ORD(WFTop);
  194.   crystal(104,2,5,0);
  195.   Top:= IntOut[1];
  196.   Id:= IntOut[2];
  197.   Below:= IntOut[3];
  198. END GetTopAndBelow;
  199.  
  200. PROCEDURE GetFirstXYWH(Handle: SIGNEDWORD; VAR Rect: GRect);
  201. BEGIN
  202.   WITH IntIn DO
  203.     Array[0]:= Handle;
  204.     Array[1]:= ORD(WFFirstXYWH);
  205.   END;
  206.   crystal(104,2,5,0);
  207.   WITH Rect DO
  208.     GX:= IntOut[1];
  209.     GY:= IntOut[2];
  210.     GW:= IntOut[3];
  211.     GH:= IntOut[4];
  212.   END;
  213. END GetFirstXYWH;
  214.  
  215. PROCEDURE GetNextXYWH(Handle: SIGNEDWORD; VAR Rect: GRect);
  216. BEGIN
  217.   WITH IntIn DO
  218.     Array[0]:= Handle;
  219.     Array[1]:= ORD(WFNextXYWH);
  220.   END;
  221.   crystal(104,2,5,0);
  222.   WITH Rect DO
  223.     GX:= IntOut[1];
  224.     GY:= IntOut[2];
  225.     GW:= IntOut[3];
  226.     GH:= IntOut[4];
  227.   END;
  228. END GetNextXYWH;
  229.  
  230. PROCEDURE SetNewDesk(PTree: TreePtr; Index: ObjectIndex);
  231. BEGIN
  232.   WITH IntIn DO
  233.     WH:= Desk;
  234.     WF:= ORD(WFNewDesk);
  235.     WA:= PTree;
  236.     WO:= Index;
  237.   END;
  238.   crystal(105,6,1,0);
  239. END SetNewDesk;
  240.  
  241. PROCEDURE GetNewDesk(): TreePtr;
  242.  
  243. VAR P: POINTER TO TreePtr;
  244.  
  245. BEGIN
  246.   IntIn.Array[1]:= ORD(WFNewDesk);
  247.   crystal(104,2,3,0);
  248.   P:= NIL;
  249.   P:= ADR(IntOut);
  250.   RETURN P^;
  251. END GetNewDesk;
  252.  
  253. PROCEDURE SetHSlSize(Handle: SIGNEDWORD; Size: SIGNEDWORD);
  254. BEGIN
  255.   WITH IntIn DO
  256.     Array[0]:= Handle;
  257.     Array[1]:= ORD(WFHSlSize);
  258.     Array[2]:= Size;
  259.   END;
  260.   crystal(105,6,1,0);
  261. END SetHSlSize;
  262.  
  263. PROCEDURE GetHSlSize(Handle: SIGNEDWORD): SIGNEDWORD;
  264. BEGIN
  265.   WITH IntIn DO
  266.     Array[0]:= Handle;
  267.     Array[1]:= ORD(WFHSlSize);
  268.   END;
  269.   crystal(104,2,5,0);
  270. #if long
  271.   RETURN LONG(IntOut[1]);
  272. #else
  273.   RETURN IntOut[1];
  274. #endif
  275. END GetHSlSize;
  276.  
  277. PROCEDURE SetVSlSize(Handle: SIGNEDWORD; Size: SIGNEDWORD);
  278. BEGIN
  279.   WITH IntIn DO
  280.     Array[0]:= Handle;
  281.     Array[1]:= ORD(WFVSlSize);
  282.     Array[2]:= Size;
  283.   END;
  284.   crystal(105,6,1,0);
  285. END SetVSlSize;
  286.  
  287. PROCEDURE GetVSlSize(Handle: SIGNEDWORD): SIGNEDWORD;
  288. BEGIN
  289.   WITH IntIn DO
  290.     Array[0]:= Handle;
  291.     Array[1]:= ORD(WFVSlSize);
  292.   END;
  293.   crystal(104,2,5,0);
  294. #if long
  295.   RETURN LONG(IntOut[1]);
  296. #else
  297.   RETURN IntOut[1];
  298. #endif
  299. END GetVSlSize;
  300.  
  301. PROCEDURE SetTAttrb(Handle: SIGNEDWORD; IsTop: BOOLEAN);
  302.  
  303. VAR Ver: UNSIGNEDWORD;
  304.  
  305. BEGIN
  306.   Ver:= Version();
  307.   IF (Ver = 0220H) OR (Ver = 1042H) THEN
  308.     WITH IntIn DO
  309.       Array[0]:= Handle;
  310.       Array[1]:= ORD(WFTAttrb);
  311.       Array[2]:= ORD(IsTop);
  312.     END;
  313.     crystal(105,6,1,0);
  314.   ELSE
  315.     IntOut[0]:= 0; (* error *)
  316.   END;
  317. END SetTAttrb;
  318.  
  319. PROCEDURE SetSizTop(Handle: SIGNEDWORD; VAR Rect: GRect);
  320.  
  321. VAR Ver: UNSIGNEDWORD;
  322.  
  323. BEGIN
  324.   Ver:= Version();
  325.   IF (Ver = 0220H) OR (Ver = 1042H) THEN
  326.     WITH IntIn DO
  327.       Array[0]:= Handle;
  328.       Array[1]:= ORD(WFSizTop);
  329.       WITH Rect DO
  330.         Array[2]:= GX;
  331.         Array[3]:= GY;
  332.         Array[4]:= GW;
  333.         Array[5]:= GH;
  334.       END;
  335.     END;
  336.     crystal(105,6,1,0);
  337.   ELSE
  338.     IntOut[0]:= 0; (* error *)
  339.   END;
  340. END SetSizTop;
  341.  
  342. PROCEDURE GetOwner(    Handle: SIGNEDWORD;
  343.                    VAR Open  : BOOLEAN;
  344.                    VAR Above : SIGNEDWORD;
  345.                    VAR Below : SIGNEDWORD): SIGNEDWORD;
  346. BEGIN
  347.   IntIn.Array[0]:= Handle;
  348.   IntIn.Array[1]:= ORD(WindMgr.WFOwner);
  349.   crystal(104,2,4,0);
  350.   Open:= IntOut[2] = 1;
  351.   Above:= IntOut[3];
  352.   Below:= IntOut[4];
  353.   RETURN IntOut[1];
  354. END GetOwner;
  355.  
  356. PROCEDURE SetBack(Handle: SIGNEDWORD);
  357. BEGIN
  358.   IF Version() = 1042H THEN
  359.     WITH IntIn DO
  360.       Array[0]:= Handle;
  361.       Array[1]:= WFBack;
  362.     END;
  363.     crystal(105,6,1,0);
  364.   ELSE
  365.     IntOut[0]:= 0; (* error *)
  366.   END;
  367. END SetBack;
  368.  
  369. PROCEDURE SetBEvent(Handle: SIGNEDWORD; OnOff: BOOLEAN);
  370. BEGIN
  371.   WITH IntIn DO
  372.     Array[0]:= Handle;
  373.     Array[1]:= ORD(WindMgr.WFBEvent);
  374.     Array[2]:= ORD(OnOff);
  375.     Array[3]:= 0;
  376.     Array[4]:= 0;
  377.     Array[5]:= 0;
  378.   END;
  379.   crystal(105,3,0,0);
  380. END SetBEvent;
  381.  
  382. PROCEDURE GetBEvent(Handle: SIGNEDWORD): BOOLEAN;
  383. BEGIN
  384.   WITH IntIn DO
  385.     Array[0]:= Handle;
  386.     Array[1]:= ORD(WindMgr.WFBEvent);
  387.     Array[2]:= 0;
  388.     Array[3]:= 0;
  389.     Array[4]:= 0;
  390.     Array[5]:= 0;
  391.   END;
  392.   crystal(104,2,2,0);
  393.   RETURN IntOut[1] = 1;
  394. END GetBEvent;
  395.  
  396. PROCEDURE SetBottom(Handle: SIGNEDWORD);
  397. BEGIN
  398.   IntIn.Array[0]:= Handle;
  399.   IntIn.Array[1]:= ORD(WindMgr.WFBottom);
  400.   crystal(105,2,0,0);
  401. END SetBottom;
  402.  
  403. PROCEDURE GetBottom(): SIGNEDWORD;
  404. BEGIN
  405.   IntIn.Array[1]:= ORD(WindMgr.WFBottom);
  406.   crystal(104,2,2,0);
  407.   RETURN IntOut[1];
  408. END GetBottom;
  409.  
  410. PROCEDURE BeginUpdate;
  411.  
  412. VAR D: BOOLEAN;
  413.  
  414. BEGIN
  415.   D:= WindUpdate(WindMgr.BegUpdate);
  416. END BeginUpdate;
  417.  
  418. PROCEDURE EndUpdate;
  419.  
  420. VAR D: BOOLEAN;
  421.  
  422. BEGIN
  423.   D:= WindUpdate(WindMgr.EndUpdate);
  424. END EndUpdate;
  425.  
  426. PROCEDURE ChkUpdate(): BOOLEAN;
  427. BEGIN
  428.   RETURN WindUpdate(WindMgr.ChkUpdate);
  429. END ChkUpdate;
  430.  
  431. PROCEDURE BeginMouseControl;
  432.  
  433. VAR D: BOOLEAN;
  434.  
  435. BEGIN
  436.   D:= WindUpdate(WindMgr.BegMCtrl);
  437. END BeginMouseControl;
  438.  
  439. PROCEDURE EndMouseControl;
  440.  
  441. VAR D: BOOLEAN;
  442.  
  443. BEGIN
  444.   D:= WindUpdate(WindMgr.EndMCtrl);
  445. END EndMouseControl;
  446.  
  447. PROCEDURE ChkMCtrl(): BOOLEAN;
  448. BEGIN
  449.   RETURN WindUpdate(WindMgr.ChkMCtrl);
  450. END ChkMCtrl;
  451.  
  452. PROCEDURE BeginEmergency;
  453.  
  454. VAR D: BOOLEAN;
  455.  
  456. BEGIN
  457.   D:= WindUpdate(WindMgr.BegEmerg);
  458. END BeginEmergency;
  459.  
  460. PROCEDURE EndEmergency;
  461.  
  462. VAR D: BOOLEAN;
  463.  
  464. BEGIN
  465.   D:= WindUpdate(WindMgr.EndEmerg);
  466. END EndEmergency;
  467.  
  468. PROCEDURE RedrawWindow(    Window: SIGNEDWORD;
  469.                        VAR Clip  : GRect;
  470.                            Draw  : DrawProc);
  471.  
  472. VAR Rect: GRect;
  473.  
  474. BEGIN
  475.   BeginUpdate;
  476.   HideMouse;
  477.  
  478.   GetFirstXYWH(Window,Rect);
  479.   WITH Rect DO
  480.     WHILE (GW # 0) AND (GH # 0) DO
  481.       IF RcIntersect(Clip,Rect) THEN
  482.         Draw(Rect);
  483.       END;
  484.       GetNextXYWH(Window,Rect);
  485.     END;
  486.   END;
  487.  
  488.   ShowMouse;
  489.   EndUpdate;
  490. END RedrawWindow;
  491.  
  492. END WindTool.
  493.  
  494.